<?php
declare (strict_types=1);

namespace app\controller;

use app\lib\JWT;
use app\validate\CheckLogin;
use Matrix\Exception;
use think\exception\DbException;
use think\exception\ValidateException;
use think\Request;

class Login
{
    /**
     * @return \think\response\View
     * 登陆页面设计
     */
    public function index()
    {
//        跳转到登陆页面
        return view('index/LoginShow');
    }

    /**
     * @param Request $request
     * @return \think\response\Json
     * 登陆方法
     */
    public function save(Request $request)
    {
//        对前端的值进行验证
        try {
//            验证数据
            validate(CheckLogin::class)->check($request->post());
        } catch (ValidateException $exception) {
//            返回失败值
            return fail('', $exception->getMessage());
        }
//        接收前端传递的值
        $data = $request->post();
        try {
//        调用查询方法，查询数据是否在表中
            $userData = (new \app\model\User())->checkLogin($data);
        } catch (DbException $exception) {
            return fail($exception->getMessage());
        }
//        判断是否有值，如果有则代表登陆成功
        if (!$userData) {
            return fail('', '用户名或密码错误');
        }
//        保存登陆标识
        cache('user_id',$userData['id']);
//        获取token
        $token = JWT::createjwt($userData['id']);
//        组装数据
        $data = [
            'token' => $token,
            'user_id' => $userData['id']
        ];
//        返回成功值
        return succeed($data,'登陆成功');
    }

    /**
     * 显示指定的资源
     *
     * @param int $id
     * @return \think\Response
     */
    public function read($id)
    {
        //
    }

    /**
     * 保存更新的资源
     *
     * @param \think\Request $request
     * @param int $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * 删除指定资源
     *
     * @param int $id
     * @return \think\Response
     */
    public function delete($id)
    {
        //
    }
}
